From: Dan Winship Date: Wed, 2 Mar 2011 14:48:29 +0000 (-0500) Subject: MessageTray: keep notification focused through update() X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~8514 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=8fdbbe78f4b84bb8bc72df91465641ba6c7c9921;p=gnome-shell.git MessageTray: keep notification focused through update() If a notification was updated while one of its widgets was focused, it would lose the grab when that widget was destroyed. Fix that by moving the focus to a safe place before destroying the old widgets. https://bugzilla.gnome.org/show_bug.cgi?id=643687 --- diff --git a/js/ui/messageTray.js b/js/ui/messageTray.js index a2810390c..f95180167 100644 --- a/js/ui/messageTray.js +++ b/js/ui/messageTray.js @@ -467,17 +467,25 @@ Notification.prototype = { this._customContent = params.customContent; + let oldFocus = global.stage.key_focus; + if (this._icon) this._icon.destroy(); // We always clear the content area if we don't have custom // content because it might contain the @banner that didn't // fit in the banner mode. if (this._scrollArea && (!this._customContent || params.clear)) { + if (oldFocus && this._scrollArea.contains(oldFocus)) + this.actor.grab_key_focus(); + this._scrollArea.destroy(); this._scrollArea = null; this._contentArea = null; } if (this._actionArea && params.clear) { + if (oldFocus && this._actionArea.contains(oldFocus)) + this.actor.grab_key_focus(); + this._actionArea.destroy(); this._actionArea = null; this._buttonBox = null;